package 每日一题;

import java.util.Arrays;
import java.util.HashMap;

/**
 * 2418. 按身高排序
 * 给你一个字符串数组 names ，和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。
 *
 * 对于每个下标 i，names[i] 和 heights[i] 表示第 i 个人的名字和身高。
 *
 * 请按身高 降序 顺序返回对应的名字数组 names 。
 *
 *
 *
 * 示例 1：
 *
 * 输入：names = ["Mary","John","Emma"], heights = [180,165,170]
 * 输出：["Mary","Emma","John"]
 * 解释：Mary 最高，接着是 Emma 和 John 。
 * 示例 2：
 *
 * 输入：names = ["Alice","Bob","Bob"], heights = [155,185,150]
 * 输出：["Bob","Alice","Bob"]
 * 解释：第一个 Bob 最高，然后是 Alice 和第二个 Bob 。
 *
 *
 * 提示：
 *
 * n == names.length == heights.length
 * 1 <= n <= 103
 * 1 <= names[i].length <= 20
 * 1 <= heights[i] <= 105
 * names[i] 由大小写英文字母组成
 * heights 中的所有值互不相同
 */
public class D230425_T2418 {

    /**
     * 1 将身高和姓名 存入map 集合 生成映射 将身高数组排序 再根据排序结果 生成姓名排序的结果
     * 2 冒泡排序 同时操作两个数组就行
     *
     * @param names   姓名数组
     * @param heights 身高数组
     * @return 排序结果
     */
    public String[] sortPeople(String[] names, int[] heights) {

        HashMap<Integer, String> heightNamesMap = new HashMap<>();

        for (int i = 0; i < heights.length; i++) {
            heightNamesMap.put(heights[i], names[i]);
        }
        Arrays.sort(heights);

        for (int i = 0; i < heights.length; i++) {
            names[heights.length - 1 - i] = heightNamesMap.get(heights[i]);
        }

        return names;
    }
}
